package br.edu.fa7.receita.persistencia;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import br.edu.fa7.receita.model.Usuario;

public class UsuarioDAO {	
	
	private SQLiteDatabase db;
	private SQLiteHelper dbHelper;
  
	public UsuarioDAO (Context ctx){
		dbHelper = new SQLiteHelper(ctx, "receita", 1);
	}
	
	public long inserir(Usuario usuario){
		  
	    ContentValues cv = new ContentValues();
	    cv.put("nome", usuario.getNome());
	    cv.put("email", usuario.getEmail());
	    cv.put("senha", usuario.getSenha());
	    cv.put("data_nasc", usuario.getDataNascimento());
	    cv.put("sexo", usuario.getSexo());
	    
	    db = dbHelper.getWritableDatabase();
	    long id = db.insert("usuarios", null, cv);
	    db.close();
	    return id;
	}
	
	public long atualizar(Usuario usuario){
				  
	    ContentValues cv = new ContentValues();
	    cv.put("nome", usuario.getNome());
	    cv.put("email", usuario.getEmail());
	    cv.put("senha", usuario.getSenha());
	    cv.put("data_nasc", usuario.getDataNascimento());
	    cv.put("sexo", usuario.getSexo());
	    
	    db = dbHelper.getWritableDatabase();
	    long rows = db.update("usuarios", cv, "_id = ?", 
	       new String[]{ String.valueOf(usuario.getId())});
	    db.close();
	    return rows; // qtde. de linhas afetadas 
	} 
	
	public int excluir(int id){
	    db = dbHelper.getWritableDatabase();
	    int rows = db.delete("usuarios", "_id = ?", new String[]{ String.valueOf(id) });
	    return rows; // qtde. de linhas afetadas
	}
	
	public List<Usuario> buscarUsuarioPorNome(String nome){
		
		db = dbHelper.getReadableDatabase();
		
	    List<Usuario> lista = new ArrayList<Usuario>();
	
	    String[] columns = new String[]{"_id", "nome", "email", "senha", "data_nasc", "sexo"};
	    
	    String[] args = new String[]{nome+"%"};
	    
	    Cursor c = db.query("usuarios", columns, "nome like ?", args, null, null, "nome");
	
	    c.moveToFirst();
	    
	    while(!c.isAfterLast()){
	      Usuario usuario = fillUsuario(c);
	      lista.add(usuario);
	      c.moveToNext();
	    }
	    
	    c.close();
	    db.close();
	    return lista;
	}
	
	public Usuario buscarUsuarioPorLogin(String email){		
		
		db = dbHelper.getReadableDatabase();
		
		Usuario usuario = new Usuario();
		
	    String[] columns = new String[]{"_id", "nome", "email", "senha", "data_nasc", "sexo"};
	    
	    String[] args = new String[]{email+"%"};
	    
	    try {
	    
		    Cursor c = db.query("usuarios", columns, "email like ?", args, null, null, "email");
		
		    if(c != null){
		    	if(c.moveToFirst()){
		    		usuario = fillUsuario(c);
		    	}
		    }
		    c.close();
	    }finally {
	    	db.close();
	    }
	    
	    return usuario;
	}
	
	private Usuario fillUsuario(Cursor cursor) {
	    Usuario usuario = new Usuario();
	    usuario.setId((int)cursor.getLong(0));
	    usuario.setNome(cursor.getString(1));
	    usuario.setEmail(cursor.getString(2));
	    usuario.setSenha(cursor.getString(3));
	    usuario.setDataNascimento(cursor.getString(4));
	    usuario.setSexo(cursor.getInt(5));
	    return usuario;
	}
}